{
    "lexemes": "[a-zA-Z_][a-zA-Z0-9_.]*(\\!|\\?)?",
    "keywords": "and false then defined module in return redo retry end for true self when next until do begin unless nil break not case cond alias while ensure or include use alias fn quote require import with|0",
    "contains": [
        {
            "className": "string",
            "contains": [
                {
                    "begin": "\\\\[\\s\\S]",
                    "relevance": 0
                },
                {
                    "className": "subst",
                    "begin": "#\\{",
                    "end": "}",
                    "lexemes": "[a-zA-Z_][a-zA-Z0-9_.]*(\\!|\\?)?",
                    "keywords": "and false then defined module in return redo retry end for true self when next until do begin unless nil break not case cond alias while ensure or include use alias fn quote require import with|0",
                    "contains": {
                        "$ref": "#contains"
                    }
                }
            ],
            "variants": [
                {
                    "begin": "\"\"\"",
                    "end": "\"\"\""
                },
                {
                    "begin": "'''",
                    "end": "'''"
                },
                {
                    "begin": "~S\"\"\"",
                    "end": "\"\"\"",
                    "contains": []
                },
                {
                    "begin": "~S\"",
                    "end": "\"",
                    "contains": []
                },
                {
                    "begin": "~S'''",
                    "end": "'''",
                    "contains": []
                },
                {
                    "begin": "~S'",
                    "end": "'",
                    "contains": []
                },
                {
                    "begin": "'",
                    "end": "'"
                },
                {
                    "begin": "\"",
                    "end": "\""
                }
            ]
        },
        {
            "className": "string",
            "begin": "~[A-Z](?=[\/|([{<\"'])",
            "contains": [
                {
                    "begin": "\"",
                    "end": "\""
                },
                {
                    "begin": "'",
                    "end": "'"
                },
                {
                    "begin": "\\\/",
                    "end": "\\\/"
                },
                {
                    "begin": "\\|",
                    "end": "\\|"
                },
                {
                    "begin": "\\(",
                    "end": "\\)"
                },
                {
                    "begin": "\\[",
                    "end": "\\]"
                },
                {
                    "begin": "\\{",
                    "end": "\\}"
                },
                {
                    "begin": "\\<",
                    "end": "\\>"
                }
            ]
        },
        {
            "className": "string",
            "begin": "~[a-z](?=[\/|([{<\"'])",
            "contains": [
                {
                    "endsParent": true,
                    "contains": [
                        {
                            "contains": [
                                {
                                    "$ref": "#contains.0.contains.0"
                                },
                                {
                                    "$ref": "#contains.0.contains.1"
                                }
                            ],
                            "variants": [
                                {
                                    "begin": "\"",
                                    "end": "\""
                                },
                                {
                                    "begin": "'",
                                    "end": "'"
                                },
                                {
                                    "begin": "\\\/",
                                    "end": "\\\/"
                                },
                                {
                                    "begin": "\\|",
                                    "end": "\\|"
                                },
                                {
                                    "begin": "\\(",
                                    "end": "\\)"
                                },
                                {
                                    "begin": "\\[",
                                    "end": "\\]"
                                },
                                {
                                    "begin": "\\{",
                                    "end": "\\}"
                                },
                                {
                                    "begin": "<",
                                    "end": ">"
                                }
                            ]
                        }
                    ]
                }
            ]
        },
        {
            "className": "comment",
            "begin": "#",
            "end": "$",
            "contains": [
                {
                    "begin": "\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b"
                },
                {
                    "className": "doctag",
                    "begin": "(?:TODO|FIXME|NOTE|BUG|XXX):",
                    "relevance": 0
                }
            ]
        },
        {
            "className": "class",
            "beginKeywords": "defimpl defmodule defprotocol defrecord",
            "end": "\\bdo\\b|$|;",
            "contains": [
                {
                    "className": "title",
                    "begin": "[a-zA-Z_][a-zA-Z0-9_.]*(\\!|\\?)?",
                    "relevance": 0,
                    "endsParent": true
                }
            ]
        },
        {
            "className": "function",
            "beginKeywords": "def defp defmacro",
            "end": "\\B\\b",
            "contains": {
                "$ref": "#contains.4.contains"
            }
        },
        {
            "begin": "::"
        },
        {
            "className": "symbol",
            "begin": ":(?![\\s:])",
            "contains": [
                {
                    "$ref": "#contains.0"
                },
                {
                    "begin": "[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-\/+%^&*~`|]|\\[\\]=?"
                }
            ],
            "relevance": 0
        },
        {
            "className": "symbol",
            "begin": "[a-zA-Z_][a-zA-Z0-9_.]*(\\!|\\?)?:(?!:)",
            "relevance": 0
        },
        {
            "className": "number",
            "begin": "(\\b0o[0-7_]+)|(\\b0b[01_]+)|(\\b0x[0-9a-fA-F_]+)|(-?\\b[1-9][0-9_]*(.[0-9_]+([eE][-+]?[0-9]+)?)?)",
            "relevance": 0
        },
        {
            "className": "variable",
            "begin": "(\\$\\W)|((\\$|\\@\\@?)(\\w+))"
        },
        {
            "begin": "->"
        },
        {
            "begin": "(!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|\/=|\/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~)\\s*",
            "contains": [
                {
                    "$ref": "#contains.3"
                },
                {
                    "className": "regexp",
                    "illegal": "\\n",
                    "contains": [
                        {
                            "$ref": "#contains.0.contains.0"
                        },
                        {
                            "$ref": "#contains.0.contains.1"
                        }
                    ],
                    "variants": [
                        {
                            "begin": "\/",
                            "end": "\/[a-z]*"
                        },
                        {
                            "begin": "%r\\[",
                            "end": "\\][a-z]*"
                        }
                    ]
                }
            ],
            "relevance": 0
        }
    ]
}
